\section{Benchmark com atrasos}
\label{sec:benchdelaycmp}

A motivação para realizar este benchmark é que o cenário do benchmark principal pode ser considerado irrealista; normalmente existe algum processamento associado à leitura e escrita de linhas, e admite-se que a introdução desse processamento possa vir a alterar os resultados. Por isso resolveu-se introduzir a realização de uma tarefa entre operações de leitura/escrita, que provocará um atraso entre as invocações sucessivas de operações do ResultSet. A introdução do atraso é realizada em dois locais: entre colunas e entre linhas; ver-se-á assim se algum dos dois tem algum efeito nos resultados finais do benchmark. O resultados para os dois locais foram obtidos em dois benchmarks separados.

Neste benchmark apenas o contexto de leitura e de actualização foram testados. O contexto de inserção do ponto de vista operacional é semelhante ao contexto de actualização, pelo que os seus resultados seriam redundantes. O contexto de remoção não realiza processamento dos valores das colunas, e é por isso excluído. As listagens \ref{lst:ctx-readdelayc}, \ref{lst:ctx-readdelayl}, \ref{lst:ctx-updatetdelayc} e \ref{lst:ctx-updatetdelayl} apresentam o código executado por cada thread para os diferentes contextos.

\lstinputlisting[firstline=2,lastline=23,caption=Contexto de leitura com atraso entre colunas.,label=lst:ctx-readdelayc]{code/contexts-delay.java}

\lstinputlisting[firstline=26,lastline=41,caption=Contexto de leitura com atraso entre linhas.,label=lst:ctx-readdelayl]{code/contexts-delay.java}

\lstinputlisting[firstline=44,lastline=66,caption=Contexto de actualização com atraso entre colunas.,label=lst:ctx-updatetdelayc]{code/contexts-delay.java}

\lstinputlisting[firstline=69,lastline=87,caption=Contexto de actualização com a atraso entre linhas.,label=lst:ctx-updatetdelayl]{code/contexts-delay.java}

O código dos contextos deste benchmark é muito semelhante ao código do benchmark principal, a diferença fundamental está na invocação do método \texttt{delayfunc()}  da classe ResultSetRunnable entre cada operação sobre uma coluna para introduzir atraso entre colunas, ou entre cada linha lida para introduzir atraso entre linhas. O código executado por este método encontra-se na listagem \ref{lst:delayfunc}. Realizando diversos testes, verificou-se que o método introduz o atraso de aproximadamente \texttt{delayms}. A variável delayms pertence à classe ResultSetRunnable, e o seu valor pode ser alterado usando o método setDelay dessa mesma classe.
\lstinputlisting[firstline=90,lastline=96,caption=Método de atraso.,label=lst:delayfunc]{code/contexts-delay.java}

Os resultados deste benchmark são apresentados na secção \ref{sec:resdelaycmp}, e discutidos na secção \ref{sec:disdelaycmp}. 
